#pragma once

#include <iostream>

using namespace std;

class DataHolder {
public:
	
	enum Type {
		BOOLEAN,
		INT,
		FLOAT,
		STRING,
		VARIABLE_NAME
	};
	
	DataHolder();
	virtual ~DataHolder() {}
	
	Type getType() { return m_type; }
	
	virtual bool getBooleanValue() = 0;
	virtual int getIntValue() = 0;	
	virtual float getFloatValue() = 0;
	virtual string getStringValue() = 0;
	virtual string getVariableName() = 0;
	
	bool isReferenced() { return m_isReferenced; }
	virtual void setReferenced(bool value) { m_isReferenced = value; }
	
protected:
	
	Type m_type;
	bool m_isReferenced;
	
};